/**
 *@Name: CDco100
 *@Description: Clase que manipula formatos de contabilización desde las tablas dco100 y dco101
 *@Version: 1.01.7
 *@Author: Andrés Albán
 */
package contabilidad;

import conexion.CConexion;
import java.io.IOException;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class CDco100 extends CConexion {

    /**Variables globales*/
    private String compania = login.getCompaniaActual();
    private String codigo = null; //dco100cdgo
    private String codigoAuxiliar = null; //dco101coax
    private String tipoEntidad = null; //dco101tien
    private String origen = null; //dco100orig
    private String tipoComprobante = null; //dco100tico
    private String codigoDiario = null; //dco100codi
    private String descripcion = null; //dco100desc
    private String[][] dco101 = null; //detalle dco101
    private int numeroDco101Filas = 0; // número de filas de los detalles
    private int numeroDco101Columnas = 0; //numero de columnas de los detalles

    /**Constructor*/
    public CDco100() {
        super();
    }

    public CDco100(String codigo) {
        super();
        try {
            this.codigo = codigo;
            /*Sacar datos de la tabla dco100*/
            Statement stncDco100 = this.getConexion().createStatement();
            String sqlDco100 = "select * from dco100 where dco100nocia='" + login.getCompaniaActual() + "' and dco100cdgo='" + this.codigo + "'";
            ResultSet rsDco100 = stncDco100.executeQuery(sqlDco100);
            rsDco100.next();

            this.origen = rsDco100.getString("dco100orig");//inicializo origen
            this.tipoComprobante = rsDco100.getString("dco100tico");//inicializo tipo de compobante
            this.codigoDiario = rsDco100.getString("dco100codi"); //inicializo codigo de diario
            this.descripcion = rsDco100.getString("dco100desc"); //inicializo descripcion

            /*Conteo de detalles en dco101*/
            Statement stncDco101Count = this.getConexion().createStatement();
            String sqlDco101Count = "select count(*) from dco101 where dco101nocia='" + login.getCompaniaActual() + "' and dco101cdgo='" + this.codigo + "'";
            ResultSet rsDco101Count = stncDco101Count.executeQuery(sqlDco101Count);
            rsDco101Count.next();
            numeroDco101Filas = Integer.parseInt(rsDco101Count.getString(1)); //variable utilizada para crear las filas de la matriz de detalles
            numeroDco101Columnas = 12; //variable utilizada para crear las columnas de la matriz de detalle

            /*Generar matriz de detalles dco101*/
            this.dco101 = new String[numeroDco101Filas][numeroDco101Columnas]; //Creo martiz de detalle
            Statement stncDco101 = this.getConexion().createStatement();
            String sqlDco101 = "select dco101coax,dco101tien,dco101niv1,dco101niv2,dco101niv3,dco101niv4,dco101niv5,dco101cec1,dco101cec2,dco101cec3,dco101timo,dco101valo from dco101 where dco101nocia='" + login.getCompaniaActual() + "' and dco101cdgo='" + this.codigo + "'";
            ResultSet rsDco101 = stncDco101.executeQuery(sqlDco101); //Resultset que contiene todos los detalles
            int i = 0;//variable auxiliar para moverme en matriz segun resultset
            while (rsDco101.next()) {
                for (int j = 0; j < numeroDco101Columnas; j++) {
                    this.dco101[i][j] = rsDco101.getString(j + 1); //lleno fila de la matriz
                }
                i++; //incremento variable auxiliar
            }
            this.exito();
        } catch (SQLException ex) {
            Logger.getLogger(CDco100.class.getName()).log(Level.SEVERE, null, ex);
            this.fracaso();
            this.cerrar();

        }

    }

    public String traerDescripcion(String nocia, String orig, String tico, String codi) throws SQLException, IOException {
        String sqlDescripcion = "select dco100desc from dco100 where dco100nocia='" + nocia + "'";
        sqlDescripcion = sqlDescripcion + " and dco100orig = '" + orig + "' ";
        sqlDescripcion = sqlDescripcion + " and dco100tico = '" + tico + "' ";
        sqlDescripcion = sqlDescripcion + " and dco100codi = '" + codi + "' ";
        System.out.println(sqlDescripcion);
        Statement stncDescripcion = this.getConexion().createStatement();
        ResultSet rsDescripcion = stncDescripcion.executeQuery(sqlDescripcion);
        rsDescripcion.next();
        return rsDescripcion.getString(1);
    }

    /**
     * @return Código de formato de contabilización
     */
    public String getCodigo() {
        return codigo;
    }

    /**
     * @return the codigoAuxiliar
     */
    public String getCodigoAuxiliar() {
        return codigoAuxiliar;
    }

    /**
     * @return the tipoEntidad
     */
    public String getTipoEntidad() {
        return tipoEntidad;
    }

    /**
     * @return Origen de transacción
     */
    public String getOrigen() {
        return origen;
    }

    /**
     * @return Tipo de Comprobante
     */
    public String getTipoComprobante() {
        return tipoComprobante;
    }

    /**
     * @return Cóodigo de diario
     */
    public String getCodigoDiario() {
        return codigoDiario;
    }

    /**
     * @return Descripción de formato
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * @return Detalle co101
     */
    public String[][] getDco101() {
        return dco101;
    }

    /**
     * @return the numeroDco101Filas
     */
    public int getNumeroDco101Filas() {
        return numeroDco101Filas;
    }

    /**
     * @return the numeroDco101Columnas
     */
    public int getNumeroDco101Columnas() {
        return numeroDco101Columnas;
    }

    public ResultSet buscarDetalleCuenta(String codigo) throws SQLException {
        Statement stncBuscarDetalleCuenta = this.getConexion().createStatement();
        ResultSet rsBuscarDetalleCuenta = null;
        String sqlBuscarDetalleCuenta = "select * from dco101 where dco101nocia = '" + compania + "' and dco101cdgo = '" + codigo + "'";
        rsBuscarDetalleCuenta = stncBuscarDetalleCuenta.executeQuery(sqlBuscarDetalleCuenta);
        return rsBuscarDetalleCuenta;
    }

    public ResultSet buscarDetalleCuenta(String codigo, String tipoEntidad) throws SQLException {
        Statement stncBuscarDetalleCuenta = this.getConexion().createStatement();
        ResultSet rsBuscarDetalleCuenta = null;
        String sqlBuscarDetalleCuenta = "select * from dco101 where dco101nocia = '" + compania + "' and dco101cdgo = '" + codigo + "'";
        if (!tipoEntidad.equalsIgnoreCase("")) {
            sqlBuscarDetalleCuenta +=  " and dco101tien='" + tipoEntidad + "'";
        }        
        rsBuscarDetalleCuenta = stncBuscarDetalleCuenta.executeQuery(sqlBuscarDetalleCuenta);
        return rsBuscarDetalleCuenta;
    }
    public ResultSet buscarDetalleCuentaXCodigoAuxiliar(String codigo, String codigoAuxiliar) throws SQLException {
        Statement stncBuscarDetalleCuenta = this.getConexion().createStatement();
        ResultSet rsBuscarDetalleCuenta = null;
        String sqlBuscarDetalleCuenta = "select * from dco101 where dco101nocia = '" + compania + "' and dco101cdgo = '" + codigo + "'";
        if (!codigoAuxiliar.equalsIgnoreCase("")) {
            sqlBuscarDetalleCuenta +=  " and dco101coax='" + codigoAuxiliar + "'";
        }        
        rsBuscarDetalleCuenta = stncBuscarDetalleCuenta.executeQuery(sqlBuscarDetalleCuenta);
        return rsBuscarDetalleCuenta;
    }
}
